{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 打包、解包函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "b'\\x03\\x00\\x00\\x00'"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import struct\n",
    "struct.pack('i',3)\n",
    "#help(struct.pack)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读二进制文件"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 用struct.unpack()读取二进制文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2051, 60000, 28, 28)\n",
      "47040000\n"
     ]
    }
   ],
   "source": [
    "import struct\n",
    "with open('./train-images-idx3-ubyte', 'rb') as f:  # training set image file\n",
    "    buffer = f.read(4*4) # 4个int\n",
    "    head = struct.unpack('>iiii',buffer)\n",
    "    print(head)  # magic number (int4, 2051), number of images (int4), number of rows, number of cols\n",
    "    length = head[1] * head[2]  * head[3]\n",
    "    print(length)\n",
    "    buffer = f.read(length)\n",
    "#   print(buffer)\n",
    "    data = struct.unpack('>{}B'.format(length),buffer)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "47040000"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data)   # number of pixels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "imgs = np.reshape(data, (head[1], head[2], head[3]))   # images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPsAAAD4CAYAAAAq5pAIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAOEUlEQVR4nO3dcYwV5bnH8d8jLUalENSIG9Ha22Bym0YXQUJiU6lNG4sm0JhWiHFp2mRJLAk1jam2q5DUGxujNGoicaukWLlCFS3Y1EsNS/TemDSuSBVLW6mhdMuGFTWyxEQqPPePHZoVd95Zzpk5c+D5fpLNOWeenTOPx/0xc847c15zdwE49Z1WdwMAWoOwA0EQdiAIwg4EQdiBID7Vyo2ZGR/9AxVzdxtreVN7djO7xsz+Yma7zey2Zp4LQLWs0XF2M5sg6a+SviZpQNLLkha7+58S67BnBypWxZ59jqTd7v6Wux+WtF7SgiaeD0CFmgn7BZL+MerxQLbsY8ys28z6zay/iW0BaFIzH9CNdajwicN0d++V1CtxGA/UqZk9+4CkC0c9ni5pX3PtAKhKM2F/WdIMM/ucmU2UtEjS5nLaAlC2hg/j3f0jM1smaYukCZLWuPsbpXUGoFQND701tDHeswOVq+SkGgAnD8IOBEHYgSAIOxAEYQeCIOxAEIQdCIKwA0EQdiAIwg4EQdiBIAg7EARhB4Ig7EAQhB0IgrADQRB2IAjCDgRB2IEgCDsQBGEHgmjplM049cyaNStZX7ZsWW6tq6srue5jjz2WrD/44IPJ+vbt25P1aNizA0EQdiAIwg4EQdiBIAg7EARhB4Ig7EAQzOKKpM7OzmS9r68vWZ88eXKZ7XzM+++/n6yfc845lW27neXN4trUSTVmtkfSsKQjkj5y99nNPB+A6pRxBt1X3P1ACc8DoEK8ZweCaDbsLun3ZvaKmXWP9Qtm1m1m/WbW3+S2ADSh2cP4K919n5mdJ+l5M/uzu784+hfcvVdSr8QHdECdmtqzu/u+7HZI0jOS5pTRFIDyNRx2MzvLzD5z7L6kr0vaWVZjAMrVzGH8NEnPmNmx5/lvd/+fUrpCy8yZkz4Y27hxY7I+ZcqUZD11Hsfw8HBy3cOHDyfrRePoc+fOza0VXetetO2TUcNhd/e3JF1WYi8AKsTQGxAEYQeCIOxAEIQdCIKwA0Fwiesp4Mwzz8ytXX755cl1H3/88WR9+vTpyXo29Jor9fdVNPx1zz33JOvr169P1lO99fT0JNe9++67k/V2lneJK3t2IAjCDgRB2IEgCDsQBGEHgiDsQBCEHQiCKZtPAQ8//HBubfHixS3s5MQUnQMwadKkZP2FF15I1ufNm5dbu/TSS5PrnorYswNBEHYgCMIOBEHYgSAIOxAEYQeCIOxAEIyznwRmzZqVrF977bW5taLrzYsUjWU/++yzyfq9996bW9u3b19y3VdffTVZf++995L1q6++OrfW7OtyMmLPDgRB2IEgCDsQBGEHgiDsQBCEHQiCsANB8L3xbaCzszNZ7+vrS9YnT57c8Lafe+65ZL3oevirrroqWU9dN/7II48k13377beT9SJHjhzJrX3wwQfJdYv+u4q+875ODX9vvJmtMbMhM9s5atnZZva8mb2Z3U4ts1kA5RvPYfwvJV1z3LLbJG119xmStmaPAbSxwrC7+4uS3j1u8QJJa7P7ayUtLLkvACVr9Nz4ae4+KEnuPmhm5+X9opl1S+pucDsASlL5hTDu3iupV+IDOqBOjQ697TezDknKbofKawlAFRoN+2ZJS7L7SyRtKqcdAFUpHGc3syckzZN0rqT9klZI+o2kX0u6SNJeSd9y9+M/xBvruUIexl9yySXJ+ooVK5L1RYsWJesHDhzIrQ0ODibXveuuu5L1p556KllvZ6lx9qK/+w0bNiTrN954Y0M9tULeOHvhe3Z3zzur4qtNdQSgpThdFgiCsANBEHYgCMIOBEHYgSD4KukSnH766cl66uuUJWn+/PnJ+vDwcLLe1dWVW+vv70+ue8YZZyTrUV100UV1t1A69uxAEIQdCIKwA0EQdiAIwg4EQdiBIAg7EATj7CWYOXNmsl40jl5kwYIFyXrRtMqAxJ4dCIOwA0EQdiAIwg4EQdiBIAg7EARhB4JgnL0Eq1atStbNxvxm338rGidnHL0xp52Wvy87evRoCztpD+zZgSAIOxAEYQeCIOxAEIQdCIKwA0EQdiAIxtnH6brrrsutdXZ2Jtctmh548+bNDfWEtNRYetH/kx07dpTdTu0K9+xmtsbMhsxs56hlK83sn2a2I/tp7tsZAFRuPIfxv5R0zRjLf+7undnP78ptC0DZCsPu7i9KercFvQCoUDMf0C0zs9eyw/ypeb9kZt1m1m9m6UnHAFSq0bCvlvR5SZ2SBiXdl/eL7t7r7rPdfXaD2wJQgobC7u773f2Iux+V9AtJc8ptC0DZGgq7mXWMevhNSTvzfhdAeygcZzezJyTNk3SumQ1IWiFpnpl1SnJJeyQtrbDHtpCax3zixInJdYeGhpL1DRs2NNTTqa5o3vuVK1c2/Nx9fX3J+u23397wc7erwrC7++IxFj9aQS8AKsTpskAQhB0IgrADQRB2IAjCDgTBJa4t8OGHHybrg4ODLeqkvRQNrfX09CTrt956a7I+MDCQW7vvvtyTPiVJhw4dStZPRuzZgSAIOxAEYQeCIOxAEIQdCIKwA0EQdiAIxtlbIPJXRae+ZrtonPyGG25I1jdt2pSsX3/99cl6NOzZgSAIOxAEYQeCIOxAEIQdCIKwA0EQdiAIxtnHycwaqknSwoULk/Xly5c31FM7uOWWW5L1O+64I7c2ZcqU5Lrr1q1L1ru6upJ1fBx7diAIwg4EQdiBIAg7EARhB4Ig7EAQhB0IgnH2cXL3hmqSdP755yfrDzzwQLK+Zs2aZP2dd97Jrc2dOze57k033ZSsX3bZZcn69OnTk/W9e/fm1rZs2ZJc96GHHkrWcWIK9+xmdqGZbTOzXWb2hpktz5afbWbPm9mb2e3U6tsF0KjxHMZ/JOmH7v6fkuZK+r6ZfUHSbZK2uvsMSVuzxwDaVGHY3X3Q3bdn94cl7ZJ0gaQFktZmv7ZWUvqcUAC1OqH37GZ2saSZkv4gaZq7D0oj/yCY2Xk563RL6m6uTQDNGnfYzWySpI2SfuDuB4su/jjG3Xsl9WbPkf4kC0BlxjX0Zmaf1kjQ17n709ni/WbWkdU7JA1V0yKAMhTu2W1kF/6opF3uvmpUabOkJZJ+lt2mv9c3sAkTJiTrN998c7Je9JXIBw8ezK3NmDEjuW6zXnrppWR927ZtubU777yz7HaQMJ7D+Csl3STpdTPbkS37sUZC/msz+56kvZK+VU2LAMpQGHZ3/z9JeW/Qv1puOwCqwumyQBCEHQiCsANBEHYgCMIOBGFFl2eWurGT+Ay61KWcTz75ZHLdK664oqltF52t2Mz/w9TlsZK0fv36ZP1k/hrsU5W7j/kHw54dCIKwA0EQdiAIwg4EQdiBIAg7EARhB4JgnL0EHR0dyfrSpUuT9Z6enmS9mXH2+++/P7nu6tWrk/Xdu3cn62g/jLMDwRF2IAjCDgRB2IEgCDsQBGEHgiDsQBCMswOnGMbZgeAIOxAEYQeCIOxAEIQdCIKwA0EQdiCIwrCb2YVmts3MdpnZG2a2PFu+0sz+aWY7sp/51bcLoFGFJ9WYWYekDnffbmafkfSKpIWSvi3pkLvfO+6NcVINULm8k2rGMz/7oKTB7P6wme2SdEG57QGo2gm9ZzeziyXNlPSHbNEyM3vNzNaY2dScdbrNrN/M+pvqFEBTxn1uvJlNkvSCpP9y96fNbJqkA5Jc0k81cqj/3YLn4DAeqFjeYfy4wm5mn5b0W0lb3H3VGPWLJf3W3b9Y8DyEHahYwxfC2MhXmz4qadfooGcf3B3zTUk7m20SQHXG82n8lyT9r6TXJR3NFv9Y0mJJnRo5jN8jaWn2YV7qudizAxVr6jC+LIQdqB7XswPBEXYgCMIOBEHYgSAIOxAEYQeCIOxAEIQdCIKwA0EQdiAIwg4EQdiBIAg7EARhB4Io/MLJkh2Q9PdRj8/NlrWjdu2tXfuS6K1RZfb22bxCS69n/8TGzfrdfXZtDSS0a2/t2pdEb41qVW8cxgNBEHYgiLrD3lvz9lPatbd27Uuit0a1pLda37MDaJ269+wAWoSwA0HUEnYzu8bM/mJmu83stjp6yGNme8zs9Wwa6lrnp8vm0Bsys52jlp1tZs+b2ZvZ7Zhz7NXUW1tM452YZrzW167u6c9b/p7dzCZI+qukr0kakPSypMXu/qeWNpLDzPZImu3utZ+AYWZflnRI0mPHptYys3skvevuP8v+oZzq7j9qk95W6gSn8a6ot7xpxr+jGl+7Mqc/b0Qde/Y5kna7+1vufljSekkLauij7bn7i5LePW7xAklrs/trNfLH0nI5vbUFdx909+3Z/WFJx6YZr/W1S/TVEnWE/QJJ/xj1eEDtNd+7S/q9mb1iZt11NzOGacem2cpuz6u5n+MVTuPdSsdNM942r10j0583q46wjzU1TTuN/13p7pdL+oak72eHqxif1ZI+r5E5AAcl3VdnM9k04xsl/cDdD9bZy2hj9NWS162OsA9IunDU4+mS9tXQx5jcfV92OyTpGY287Wgn+4/NoJvdDtXcz7+5+353P+LuRyX9QjW+dtk04xslrXP3p7PFtb92Y/XVqtetjrC/LGmGmX3OzCZKWiRpcw19fIKZnZV9cCIzO0vS19V+U1FvlrQku79E0qYae/mYdpnGO2+acdX82tU+/bm7t/xH0nyNfCL/N0k/qaOHnL7+Q9Ifs5836u5N0hMaOaz7l0aOiL4n6RxJWyW9md2e3Ua9/UojU3u/ppFgddTU25c08tbwNUk7sp/5db92ib5a8rpxuiwQBGfQAUEQdiAIwg4EQdiBIAg7EARhB4Ig7EAQ/w8+sGPVrnT8WgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "for i in range(5):\n",
    "    plt.imshow(imgs[i], cmap = 'gray')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 用fetch_openml（）读取.mat文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.datasets import fetch_openml\n",
    "#mnist = fetch_openml('mnist-original', data_home = './')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Help on function fetch_openml in module sklearn.datasets._openml:\n",
      "\n",
      "fetch_openml(name=None, *, version='active', data_id=None, data_home=None, target_column='default-target', cache=True, return_X_y=False, as_frame=False)\n",
      "    Fetch dataset from openml by name or dataset id.\n",
      "    \n",
      "    Datasets are uniquely identified by either an integer ID or by a\n",
      "    combination of name and version (i.e. there might be multiple\n",
      "    versions of the 'iris' dataset). Please give either name or data_id\n",
      "    (not both). In case a name is given, a version can also be\n",
      "    provided.\n",
      "    \n",
      "    Read more in the :ref:`User Guide <openml>`.\n",
      "    \n",
      "    .. versionadded:: 0.20\n",
      "    \n",
      "    .. note:: EXPERIMENTAL\n",
      "    \n",
      "        The API is experimental (particularly the return value structure),\n",
      "        and might have small backward-incompatible changes in future releases.\n",
      "    \n",
      "    Parameters\n",
      "    ----------\n",
      "    name : str or None\n",
      "        String identifier of the dataset. Note that OpenML can have multiple\n",
      "        datasets with the same name.\n",
      "    \n",
      "    version : integer or 'active', default='active'\n",
      "        Version of the dataset. Can only be provided if also ``name`` is given.\n",
      "        If 'active' the oldest version that's still active is used. Since\n",
      "        there may be more than one active version of a dataset, and those\n",
      "        versions may fundamentally be different from one another, setting an\n",
      "        exact version is highly recommended.\n",
      "    \n",
      "    data_id : int or None\n",
      "        OpenML ID of the dataset. The most specific way of retrieving a\n",
      "        dataset. If data_id is not given, name (and potential version) are\n",
      "        used to obtain a dataset.\n",
      "    \n",
      "    data_home : string or None, default None\n",
      "        Specify another download and cache folder for the data sets. By default\n",
      "        all scikit-learn data is stored in '~/scikit_learn_data' subfolders.\n",
      "    \n",
      "    target_column : string, list or None, default 'default-target'\n",
      "        Specify the column name in the data to use as target. If\n",
      "        'default-target', the standard target column a stored on the server\n",
      "        is used. If ``None``, all columns are returned as data and the\n",
      "        target is ``None``. If list (of strings), all columns with these names\n",
      "        are returned as multi-target (Note: not all scikit-learn classifiers\n",
      "        can handle all types of multi-output combinations)\n",
      "    \n",
      "    cache : boolean, default=True\n",
      "        Whether to cache downloaded datasets using joblib.\n",
      "    \n",
      "    return_X_y : boolean, default=False.\n",
      "        If True, returns ``(data, target)`` instead of a Bunch object. See\n",
      "        below for more information about the `data` and `target` objects.\n",
      "    \n",
      "    as_frame : boolean, default=False\n",
      "        If True, the data is a pandas DataFrame including columns with\n",
      "        appropriate dtypes (numeric, string or categorical). The target is\n",
      "        a pandas DataFrame or Series depending on the number of target_columns.\n",
      "        The Bunch will contain a ``frame`` attribute with the target and the\n",
      "        data. If ``return_X_y`` is True, then ``(data, target)`` will be pandas\n",
      "        DataFrames or Series as describe above.\n",
      "    \n",
      "    Returns\n",
      "    -------\n",
      "    \n",
      "    data : :class:`~sklearn.utils.Bunch`\n",
      "        Dictionary-like object, with the following attributes.\n",
      "    \n",
      "        data : np.array, scipy.sparse.csr_matrix of floats, or pandas DataFrame\n",
      "            The feature matrix. Categorical features are encoded as ordinals.\n",
      "        target : np.array, pandas Series or DataFrame\n",
      "            The regression target or classification labels, if applicable.\n",
      "            Dtype is float if numeric, and object if categorical. If\n",
      "            ``as_frame`` is True, ``target`` is a pandas object.\n",
      "        DESCR : str\n",
      "            The full description of the dataset\n",
      "        feature_names : list\n",
      "            The names of the dataset columns\n",
      "        target_names: list\n",
      "            The names of the target columns\n",
      "    \n",
      "        .. versionadded:: 0.22\n",
      "    \n",
      "        categories : dict or None\n",
      "            Maps each categorical feature name to a list of values, such\n",
      "            that the value encoded as i is ith in the list. If ``as_frame``\n",
      "            is True, this is None.\n",
      "        details : dict\n",
      "            More metadata from OpenML\n",
      "        frame : pandas DataFrame\n",
      "            Only present when `as_frame=True`. DataFrame with ``data`` and\n",
      "            ``target``.\n",
      "    \n",
      "    (data, target) : tuple if ``return_X_y`` is True\n",
      "    \n",
      "        .. note:: EXPERIMENTAL\n",
      "    \n",
      "            This interface is **experimental** and subsequent releases may\n",
      "            change attributes without notice (although there should only be\n",
      "            minor changes to ``data`` and ``target``).\n",
      "    \n",
      "        Missing values in the 'data' are represented as NaN's. Missing values\n",
      "        in 'target' are represented as NaN's (numerical target) or None\n",
      "        (categorical target)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "help(fetch_openml)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "mnist = fetch_openml(\"mnist_784\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'data': array([[0., 0., 0., ..., 0., 0., 0.],\n",
       "        [0., 0., 0., ..., 0., 0., 0.],\n",
       "        [0., 0., 0., ..., 0., 0., 0.],\n",
       "        ...,\n",
       "        [0., 0., 0., ..., 0., 0., 0.],\n",
       "        [0., 0., 0., ..., 0., 0., 0.],\n",
       "        [0., 0., 0., ..., 0., 0., 0.]]),\n",
       " 'target': array(['5', '0', '4', ..., '4', '5', '6'], dtype=object),\n",
       " 'frame': None,\n",
       " 'categories': {},\n",
       " 'feature_names': ['pixel1',\n",
       "  'pixel2',\n",
       "  'pixel3',\n",
       "  'pixel4',\n",
       "  'pixel5',\n",
       "  'pixel6',\n",
       "  'pixel7',\n",
       "  'pixel8',\n",
       "  'pixel9',\n",
       "  'pixel10',\n",
       "  'pixel11',\n",
       "  'pixel12',\n",
       "  'pixel13',\n",
       "  'pixel14',\n",
       "  'pixel15',\n",
       "  'pixel16',\n",
       "  'pixel17',\n",
       "  'pixel18',\n",
       "  'pixel19',\n",
       "  'pixel20',\n",
       "  'pixel21',\n",
       "  'pixel22',\n",
       "  'pixel23',\n",
       "  'pixel24',\n",
       "  'pixel25',\n",
       "  'pixel26',\n",
       "  'pixel27',\n",
       "  'pixel28',\n",
       "  'pixel29',\n",
       "  'pixel30',\n",
       "  'pixel31',\n",
       "  'pixel32',\n",
       "  'pixel33',\n",
       "  'pixel34',\n",
       "  'pixel35',\n",
       "  'pixel36',\n",
       "  'pixel37',\n",
       "  'pixel38',\n",
       "  'pixel39',\n",
       "  'pixel40',\n",
       "  'pixel41',\n",
       "  'pixel42',\n",
       "  'pixel43',\n",
       "  'pixel44',\n",
       "  'pixel45',\n",
       "  'pixel46',\n",
       "  'pixel47',\n",
       "  'pixel48',\n",
       "  'pixel49',\n",
       "  'pixel50',\n",
       "  'pixel51',\n",
       "  'pixel52',\n",
       "  'pixel53',\n",
       "  'pixel54',\n",
       "  'pixel55',\n",
       "  'pixel56',\n",
       "  'pixel57',\n",
       "  'pixel58',\n",
       "  'pixel59',\n",
       "  'pixel60',\n",
       "  'pixel61',\n",
       "  'pixel62',\n",
       "  'pixel63',\n",
       "  'pixel64',\n",
       "  'pixel65',\n",
       "  'pixel66',\n",
       "  'pixel67',\n",
       "  'pixel68',\n",
       "  'pixel69',\n",
       "  'pixel70',\n",
       "  'pixel71',\n",
       "  'pixel72',\n",
       "  'pixel73',\n",
       "  'pixel74',\n",
       "  'pixel75',\n",
       "  'pixel76',\n",
       "  'pixel77',\n",
       "  'pixel78',\n",
       "  'pixel79',\n",
       "  'pixel80',\n",
       "  'pixel81',\n",
       "  'pixel82',\n",
       "  'pixel83',\n",
       "  'pixel84',\n",
       "  'pixel85',\n",
       "  'pixel86',\n",
       "  'pixel87',\n",
       "  'pixel88',\n",
       "  'pixel89',\n",
       "  'pixel90',\n",
       "  'pixel91',\n",
       "  'pixel92',\n",
       "  'pixel93',\n",
       "  'pixel94',\n",
       "  'pixel95',\n",
       "  'pixel96',\n",
       "  'pixel97',\n",
       "  'pixel98',\n",
       "  'pixel99',\n",
       "  'pixel100',\n",
       "  'pixel101',\n",
       "  'pixel102',\n",
       "  'pixel103',\n",
       "  'pixel104',\n",
       "  'pixel105',\n",
       "  'pixel106',\n",
       "  'pixel107',\n",
       "  'pixel108',\n",
       "  'pixel109',\n",
       "  'pixel110',\n",
       "  'pixel111',\n",
       "  'pixel112',\n",
       "  'pixel113',\n",
       "  'pixel114',\n",
       "  'pixel115',\n",
       "  'pixel116',\n",
       "  'pixel117',\n",
       "  'pixel118',\n",
       "  'pixel119',\n",
       "  'pixel120',\n",
       "  'pixel121',\n",
       "  'pixel122',\n",
       "  'pixel123',\n",
       "  'pixel124',\n",
       "  'pixel125',\n",
       "  'pixel126',\n",
       "  'pixel127',\n",
       "  'pixel128',\n",
       "  'pixel129',\n",
       "  'pixel130',\n",
       "  'pixel131',\n",
       "  'pixel132',\n",
       "  'pixel133',\n",
       "  'pixel134',\n",
       "  'pixel135',\n",
       "  'pixel136',\n",
       "  'pixel137',\n",
       "  'pixel138',\n",
       "  'pixel139',\n",
       "  'pixel140',\n",
       "  'pixel141',\n",
       "  'pixel142',\n",
       "  'pixel143',\n",
       "  'pixel144',\n",
       "  'pixel145',\n",
       "  'pixel146',\n",
       "  'pixel147',\n",
       "  'pixel148',\n",
       "  'pixel149',\n",
       "  'pixel150',\n",
       "  'pixel151',\n",
       "  'pixel152',\n",
       "  'pixel153',\n",
       "  'pixel154',\n",
       "  'pixel155',\n",
       "  'pixel156',\n",
       "  'pixel157',\n",
       "  'pixel158',\n",
       "  'pixel159',\n",
       "  'pixel160',\n",
       "  'pixel161',\n",
       "  'pixel162',\n",
       "  'pixel163',\n",
       "  'pixel164',\n",
       "  'pixel165',\n",
       "  'pixel166',\n",
       "  'pixel167',\n",
       "  'pixel168',\n",
       "  'pixel169',\n",
       "  'pixel170',\n",
       "  'pixel171',\n",
       "  'pixel172',\n",
       "  'pixel173',\n",
       "  'pixel174',\n",
       "  'pixel175',\n",
       "  'pixel176',\n",
       "  'pixel177',\n",
       "  'pixel178',\n",
       "  'pixel179',\n",
       "  'pixel180',\n",
       "  'pixel181',\n",
       "  'pixel182',\n",
       "  'pixel183',\n",
       "  'pixel184',\n",
       "  'pixel185',\n",
       "  'pixel186',\n",
       "  'pixel187',\n",
       "  'pixel188',\n",
       "  'pixel189',\n",
       "  'pixel190',\n",
       "  'pixel191',\n",
       "  'pixel192',\n",
       "  'pixel193',\n",
       "  'pixel194',\n",
       "  'pixel195',\n",
       "  'pixel196',\n",
       "  'pixel197',\n",
       "  'pixel198',\n",
       "  'pixel199',\n",
       "  'pixel200',\n",
       "  'pixel201',\n",
       "  'pixel202',\n",
       "  'pixel203',\n",
       "  'pixel204',\n",
       "  'pixel205',\n",
       "  'pixel206',\n",
       "  'pixel207',\n",
       "  'pixel208',\n",
       "  'pixel209',\n",
       "  'pixel210',\n",
       "  'pixel211',\n",
       "  'pixel212',\n",
       "  'pixel213',\n",
       "  'pixel214',\n",
       "  'pixel215',\n",
       "  'pixel216',\n",
       "  'pixel217',\n",
       "  'pixel218',\n",
       "  'pixel219',\n",
       "  'pixel220',\n",
       "  'pixel221',\n",
       "  'pixel222',\n",
       "  'pixel223',\n",
       "  'pixel224',\n",
       "  'pixel225',\n",
       "  'pixel226',\n",
       "  'pixel227',\n",
       "  'pixel228',\n",
       "  'pixel229',\n",
       "  'pixel230',\n",
       "  'pixel231',\n",
       "  'pixel232',\n",
       "  'pixel233',\n",
       "  'pixel234',\n",
       "  'pixel235',\n",
       "  'pixel236',\n",
       "  'pixel237',\n",
       "  'pixel238',\n",
       "  'pixel239',\n",
       "  'pixel240',\n",
       "  'pixel241',\n",
       "  'pixel242',\n",
       "  'pixel243',\n",
       "  'pixel244',\n",
       "  'pixel245',\n",
       "  'pixel246',\n",
       "  'pixel247',\n",
       "  'pixel248',\n",
       "  'pixel249',\n",
       "  'pixel250',\n",
       "  'pixel251',\n",
       "  'pixel252',\n",
       "  'pixel253',\n",
       "  'pixel254',\n",
       "  'pixel255',\n",
       "  'pixel256',\n",
       "  'pixel257',\n",
       "  'pixel258',\n",
       "  'pixel259',\n",
       "  'pixel260',\n",
       "  'pixel261',\n",
       "  'pixel262',\n",
       "  'pixel263',\n",
       "  'pixel264',\n",
       "  'pixel265',\n",
       "  'pixel266',\n",
       "  'pixel267',\n",
       "  'pixel268',\n",
       "  'pixel269',\n",
       "  'pixel270',\n",
       "  'pixel271',\n",
       "  'pixel272',\n",
       "  'pixel273',\n",
       "  'pixel274',\n",
       "  'pixel275',\n",
       "  'pixel276',\n",
       "  'pixel277',\n",
       "  'pixel278',\n",
       "  'pixel279',\n",
       "  'pixel280',\n",
       "  'pixel281',\n",
       "  'pixel282',\n",
       "  'pixel283',\n",
       "  'pixel284',\n",
       "  'pixel285',\n",
       "  'pixel286',\n",
       "  'pixel287',\n",
       "  'pixel288',\n",
       "  'pixel289',\n",
       "  'pixel290',\n",
       "  'pixel291',\n",
       "  'pixel292',\n",
       "  'pixel293',\n",
       "  'pixel294',\n",
       "  'pixel295',\n",
       "  'pixel296',\n",
       "  'pixel297',\n",
       "  'pixel298',\n",
       "  'pixel299',\n",
       "  'pixel300',\n",
       "  'pixel301',\n",
       "  'pixel302',\n",
       "  'pixel303',\n",
       "  'pixel304',\n",
       "  'pixel305',\n",
       "  'pixel306',\n",
       "  'pixel307',\n",
       "  'pixel308',\n",
       "  'pixel309',\n",
       "  'pixel310',\n",
       "  'pixel311',\n",
       "  'pixel312',\n",
       "  'pixel313',\n",
       "  'pixel314',\n",
       "  'pixel315',\n",
       "  'pixel316',\n",
       "  'pixel317',\n",
       "  'pixel318',\n",
       "  'pixel319',\n",
       "  'pixel320',\n",
       "  'pixel321',\n",
       "  'pixel322',\n",
       "  'pixel323',\n",
       "  'pixel324',\n",
       "  'pixel325',\n",
       "  'pixel326',\n",
       "  'pixel327',\n",
       "  'pixel328',\n",
       "  'pixel329',\n",
       "  'pixel330',\n",
       "  'pixel331',\n",
       "  'pixel332',\n",
       "  'pixel333',\n",
       "  'pixel334',\n",
       "  'pixel335',\n",
       "  'pixel336',\n",
       "  'pixel337',\n",
       "  'pixel338',\n",
       "  'pixel339',\n",
       "  'pixel340',\n",
       "  'pixel341',\n",
       "  'pixel342',\n",
       "  'pixel343',\n",
       "  'pixel344',\n",
       "  'pixel345',\n",
       "  'pixel346',\n",
       "  'pixel347',\n",
       "  'pixel348',\n",
       "  'pixel349',\n",
       "  'pixel350',\n",
       "  'pixel351',\n",
       "  'pixel352',\n",
       "  'pixel353',\n",
       "  'pixel354',\n",
       "  'pixel355',\n",
       "  'pixel356',\n",
       "  'pixel357',\n",
       "  'pixel358',\n",
       "  'pixel359',\n",
       "  'pixel360',\n",
       "  'pixel361',\n",
       "  'pixel362',\n",
       "  'pixel363',\n",
       "  'pixel364',\n",
       "  'pixel365',\n",
       "  'pixel366',\n",
       "  'pixel367',\n",
       "  'pixel368',\n",
       "  'pixel369',\n",
       "  'pixel370',\n",
       "  'pixel371',\n",
       "  'pixel372',\n",
       "  'pixel373',\n",
       "  'pixel374',\n",
       "  'pixel375',\n",
       "  'pixel376',\n",
       "  'pixel377',\n",
       "  'pixel378',\n",
       "  'pixel379',\n",
       "  'pixel380',\n",
       "  'pixel381',\n",
       "  'pixel382',\n",
       "  'pixel383',\n",
       "  'pixel384',\n",
       "  'pixel385',\n",
       "  'pixel386',\n",
       "  'pixel387',\n",
       "  'pixel388',\n",
       "  'pixel389',\n",
       "  'pixel390',\n",
       "  'pixel391',\n",
       "  'pixel392',\n",
       "  'pixel393',\n",
       "  'pixel394',\n",
       "  'pixel395',\n",
       "  'pixel396',\n",
       "  'pixel397',\n",
       "  'pixel398',\n",
       "  'pixel399',\n",
       "  'pixel400',\n",
       "  'pixel401',\n",
       "  'pixel402',\n",
       "  'pixel403',\n",
       "  'pixel404',\n",
       "  'pixel405',\n",
       "  'pixel406',\n",
       "  'pixel407',\n",
       "  'pixel408',\n",
       "  'pixel409',\n",
       "  'pixel410',\n",
       "  'pixel411',\n",
       "  'pixel412',\n",
       "  'pixel413',\n",
       "  'pixel414',\n",
       "  'pixel415',\n",
       "  'pixel416',\n",
       "  'pixel417',\n",
       "  'pixel418',\n",
       "  'pixel419',\n",
       "  'pixel420',\n",
       "  'pixel421',\n",
       "  'pixel422',\n",
       "  'pixel423',\n",
       "  'pixel424',\n",
       "  'pixel425',\n",
       "  'pixel426',\n",
       "  'pixel427',\n",
       "  'pixel428',\n",
       "  'pixel429',\n",
       "  'pixel430',\n",
       "  'pixel431',\n",
       "  'pixel432',\n",
       "  'pixel433',\n",
       "  'pixel434',\n",
       "  'pixel435',\n",
       "  'pixel436',\n",
       "  'pixel437',\n",
       "  'pixel438',\n",
       "  'pixel439',\n",
       "  'pixel440',\n",
       "  'pixel441',\n",
       "  'pixel442',\n",
       "  'pixel443',\n",
       "  'pixel444',\n",
       "  'pixel445',\n",
       "  'pixel446',\n",
       "  'pixel447',\n",
       "  'pixel448',\n",
       "  'pixel449',\n",
       "  'pixel450',\n",
       "  'pixel451',\n",
       "  'pixel452',\n",
       "  'pixel453',\n",
       "  'pixel454',\n",
       "  'pixel455',\n",
       "  'pixel456',\n",
       "  'pixel457',\n",
       "  'pixel458',\n",
       "  'pixel459',\n",
       "  'pixel460',\n",
       "  'pixel461',\n",
       "  'pixel462',\n",
       "  'pixel463',\n",
       "  'pixel464',\n",
       "  'pixel465',\n",
       "  'pixel466',\n",
       "  'pixel467',\n",
       "  'pixel468',\n",
       "  'pixel469',\n",
       "  'pixel470',\n",
       "  'pixel471',\n",
       "  'pixel472',\n",
       "  'pixel473',\n",
       "  'pixel474',\n",
       "  'pixel475',\n",
       "  'pixel476',\n",
       "  'pixel477',\n",
       "  'pixel478',\n",
       "  'pixel479',\n",
       "  'pixel480',\n",
       "  'pixel481',\n",
       "  'pixel482',\n",
       "  'pixel483',\n",
       "  'pixel484',\n",
       "  'pixel485',\n",
       "  'pixel486',\n",
       "  'pixel487',\n",
       "  'pixel488',\n",
       "  'pixel489',\n",
       "  'pixel490',\n",
       "  'pixel491',\n",
       "  'pixel492',\n",
       "  'pixel493',\n",
       "  'pixel494',\n",
       "  'pixel495',\n",
       "  'pixel496',\n",
       "  'pixel497',\n",
       "  'pixel498',\n",
       "  'pixel499',\n",
       "  'pixel500',\n",
       "  'pixel501',\n",
       "  'pixel502',\n",
       "  'pixel503',\n",
       "  'pixel504',\n",
       "  'pixel505',\n",
       "  'pixel506',\n",
       "  'pixel507',\n",
       "  'pixel508',\n",
       "  'pixel509',\n",
       "  'pixel510',\n",
       "  'pixel511',\n",
       "  'pixel512',\n",
       "  'pixel513',\n",
       "  'pixel514',\n",
       "  'pixel515',\n",
       "  'pixel516',\n",
       "  'pixel517',\n",
       "  'pixel518',\n",
       "  'pixel519',\n",
       "  'pixel520',\n",
       "  'pixel521',\n",
       "  'pixel522',\n",
       "  'pixel523',\n",
       "  'pixel524',\n",
       "  'pixel525',\n",
       "  'pixel526',\n",
       "  'pixel527',\n",
       "  'pixel528',\n",
       "  'pixel529',\n",
       "  'pixel530',\n",
       "  'pixel531',\n",
       "  'pixel532',\n",
       "  'pixel533',\n",
       "  'pixel534',\n",
       "  'pixel535',\n",
       "  'pixel536',\n",
       "  'pixel537',\n",
       "  'pixel538',\n",
       "  'pixel539',\n",
       "  'pixel540',\n",
       "  'pixel541',\n",
       "  'pixel542',\n",
       "  'pixel543',\n",
       "  'pixel544',\n",
       "  'pixel545',\n",
       "  'pixel546',\n",
       "  'pixel547',\n",
       "  'pixel548',\n",
       "  'pixel549',\n",
       "  'pixel550',\n",
       "  'pixel551',\n",
       "  'pixel552',\n",
       "  'pixel553',\n",
       "  'pixel554',\n",
       "  'pixel555',\n",
       "  'pixel556',\n",
       "  'pixel557',\n",
       "  'pixel558',\n",
       "  'pixel559',\n",
       "  'pixel560',\n",
       "  'pixel561',\n",
       "  'pixel562',\n",
       "  'pixel563',\n",
       "  'pixel564',\n",
       "  'pixel565',\n",
       "  'pixel566',\n",
       "  'pixel567',\n",
       "  'pixel568',\n",
       "  'pixel569',\n",
       "  'pixel570',\n",
       "  'pixel571',\n",
       "  'pixel572',\n",
       "  'pixel573',\n",
       "  'pixel574',\n",
       "  'pixel575',\n",
       "  'pixel576',\n",
       "  'pixel577',\n",
       "  'pixel578',\n",
       "  'pixel579',\n",
       "  'pixel580',\n",
       "  'pixel581',\n",
       "  'pixel582',\n",
       "  'pixel583',\n",
       "  'pixel584',\n",
       "  'pixel585',\n",
       "  'pixel586',\n",
       "  'pixel587',\n",
       "  'pixel588',\n",
       "  'pixel589',\n",
       "  'pixel590',\n",
       "  'pixel591',\n",
       "  'pixel592',\n",
       "  'pixel593',\n",
       "  'pixel594',\n",
       "  'pixel595',\n",
       "  'pixel596',\n",
       "  'pixel597',\n",
       "  'pixel598',\n",
       "  'pixel599',\n",
       "  'pixel600',\n",
       "  'pixel601',\n",
       "  'pixel602',\n",
       "  'pixel603',\n",
       "  'pixel604',\n",
       "  'pixel605',\n",
       "  'pixel606',\n",
       "  'pixel607',\n",
       "  'pixel608',\n",
       "  'pixel609',\n",
       "  'pixel610',\n",
       "  'pixel611',\n",
       "  'pixel612',\n",
       "  'pixel613',\n",
       "  'pixel614',\n",
       "  'pixel615',\n",
       "  'pixel616',\n",
       "  'pixel617',\n",
       "  'pixel618',\n",
       "  'pixel619',\n",
       "  'pixel620',\n",
       "  'pixel621',\n",
       "  'pixel622',\n",
       "  'pixel623',\n",
       "  'pixel624',\n",
       "  'pixel625',\n",
       "  'pixel626',\n",
       "  'pixel627',\n",
       "  'pixel628',\n",
       "  'pixel629',\n",
       "  'pixel630',\n",
       "  'pixel631',\n",
       "  'pixel632',\n",
       "  'pixel633',\n",
       "  'pixel634',\n",
       "  'pixel635',\n",
       "  'pixel636',\n",
       "  'pixel637',\n",
       "  'pixel638',\n",
       "  'pixel639',\n",
       "  'pixel640',\n",
       "  'pixel641',\n",
       "  'pixel642',\n",
       "  'pixel643',\n",
       "  'pixel644',\n",
       "  'pixel645',\n",
       "  'pixel646',\n",
       "  'pixel647',\n",
       "  'pixel648',\n",
       "  'pixel649',\n",
       "  'pixel650',\n",
       "  'pixel651',\n",
       "  'pixel652',\n",
       "  'pixel653',\n",
       "  'pixel654',\n",
       "  'pixel655',\n",
       "  'pixel656',\n",
       "  'pixel657',\n",
       "  'pixel658',\n",
       "  'pixel659',\n",
       "  'pixel660',\n",
       "  'pixel661',\n",
       "  'pixel662',\n",
       "  'pixel663',\n",
       "  'pixel664',\n",
       "  'pixel665',\n",
       "  'pixel666',\n",
       "  'pixel667',\n",
       "  'pixel668',\n",
       "  'pixel669',\n",
       "  'pixel670',\n",
       "  'pixel671',\n",
       "  'pixel672',\n",
       "  'pixel673',\n",
       "  'pixel674',\n",
       "  'pixel675',\n",
       "  'pixel676',\n",
       "  'pixel677',\n",
       "  'pixel678',\n",
       "  'pixel679',\n",
       "  'pixel680',\n",
       "  'pixel681',\n",
       "  'pixel682',\n",
       "  'pixel683',\n",
       "  'pixel684',\n",
       "  'pixel685',\n",
       "  'pixel686',\n",
       "  'pixel687',\n",
       "  'pixel688',\n",
       "  'pixel689',\n",
       "  'pixel690',\n",
       "  'pixel691',\n",
       "  'pixel692',\n",
       "  'pixel693',\n",
       "  'pixel694',\n",
       "  'pixel695',\n",
       "  'pixel696',\n",
       "  'pixel697',\n",
       "  'pixel698',\n",
       "  'pixel699',\n",
       "  'pixel700',\n",
       "  'pixel701',\n",
       "  'pixel702',\n",
       "  'pixel703',\n",
       "  'pixel704',\n",
       "  'pixel705',\n",
       "  'pixel706',\n",
       "  'pixel707',\n",
       "  'pixel708',\n",
       "  'pixel709',\n",
       "  'pixel710',\n",
       "  'pixel711',\n",
       "  'pixel712',\n",
       "  'pixel713',\n",
       "  'pixel714',\n",
       "  'pixel715',\n",
       "  'pixel716',\n",
       "  'pixel717',\n",
       "  'pixel718',\n",
       "  'pixel719',\n",
       "  'pixel720',\n",
       "  'pixel721',\n",
       "  'pixel722',\n",
       "  'pixel723',\n",
       "  'pixel724',\n",
       "  'pixel725',\n",
       "  'pixel726',\n",
       "  'pixel727',\n",
       "  'pixel728',\n",
       "  'pixel729',\n",
       "  'pixel730',\n",
       "  'pixel731',\n",
       "  'pixel732',\n",
       "  'pixel733',\n",
       "  'pixel734',\n",
       "  'pixel735',\n",
       "  'pixel736',\n",
       "  'pixel737',\n",
       "  'pixel738',\n",
       "  'pixel739',\n",
       "  'pixel740',\n",
       "  'pixel741',\n",
       "  'pixel742',\n",
       "  'pixel743',\n",
       "  'pixel744',\n",
       "  'pixel745',\n",
       "  'pixel746',\n",
       "  'pixel747',\n",
       "  'pixel748',\n",
       "  'pixel749',\n",
       "  'pixel750',\n",
       "  'pixel751',\n",
       "  'pixel752',\n",
       "  'pixel753',\n",
       "  'pixel754',\n",
       "  'pixel755',\n",
       "  'pixel756',\n",
       "  'pixel757',\n",
       "  'pixel758',\n",
       "  'pixel759',\n",
       "  'pixel760',\n",
       "  'pixel761',\n",
       "  'pixel762',\n",
       "  'pixel763',\n",
       "  'pixel764',\n",
       "  'pixel765',\n",
       "  'pixel766',\n",
       "  'pixel767',\n",
       "  'pixel768',\n",
       "  'pixel769',\n",
       "  'pixel770',\n",
       "  'pixel771',\n",
       "  'pixel772',\n",
       "  'pixel773',\n",
       "  'pixel774',\n",
       "  'pixel775',\n",
       "  'pixel776',\n",
       "  'pixel777',\n",
       "  'pixel778',\n",
       "  'pixel779',\n",
       "  'pixel780',\n",
       "  'pixel781',\n",
       "  'pixel782',\n",
       "  'pixel783',\n",
       "  'pixel784'],\n",
       " 'target_names': ['class'],\n",
       " 'DESCR': \"**Author**: Yann LeCun, Corinna Cortes, Christopher J.C. Burges  \\n**Source**: [MNIST Website](http://yann.lecun.com/exdb/mnist/) - Date unknown  \\n**Please cite**:  \\n\\nThe MNIST database of handwritten digits with 784 features, raw data available at: http://yann.lecun.com/exdb/mnist/. It can be split in a training set of the first 60,000 examples, and a test set of 10,000 examples  \\n\\nIt is a subset of a larger set available from NIST. The digits have been size-normalized and centered in a fixed-size image. It is a good database for people who want to try learning techniques and pattern recognition methods on real-world data while spending minimal efforts on preprocessing and formatting. The original black and white (bilevel) images from NIST were size normalized to fit in a 20x20 pixel box while preserving their aspect ratio. The resulting images contain grey levels as a result of the anti-aliasing technique used by the normalization algorithm. the images were centered in a 28x28 image by computing the center of mass of the pixels, and translating the image so as to position this point at the center of the 28x28 field.  \\n\\nWith some classification methods (particularly template-based methods, such as SVM and K-nearest neighbors), the error rate improves when the digits are centered by bounding box rather than center of mass. If you do this kind of pre-processing, you should report it in your publications. The MNIST database was constructed from NIST's NIST originally designated SD-3 as their training set and SD-1 as their test set. However, SD-3 is much cleaner and easier to recognize than SD-1. The reason for this can be found on the fact that SD-3 was collected among Census Bureau employees, while SD-1 was collected among high-school students. Drawing sensible conclusions from learning experiments requires that the result be independent of the choice of training set and test among the complete set of samples. Therefore it was necessary to build a new database by mixing NIST's datasets.  \\n\\nThe MNIST training set is composed of 30,000 patterns from SD-3 and 30,000 patterns from SD-1. Our test set was composed of 5,000 patterns from SD-3 and 5,000 patterns from SD-1. The 60,000 pattern training set contained examples from approximately 250 writers. We made sure that the sets of writers of the training set and test set were disjoint. SD-1 contains 58,527 digit images written by 500 different writers. In contrast to SD-3, where blocks of data from each writer appeared in sequence, the data in SD-1 is scrambled. Writer identities for SD-1 is available and we used this information to unscramble the writers. We then split SD-1 in two: characters written by the first 250 writers went into our new training set. The remaining 250 writers were placed in our test set. Thus we had two sets with nearly 30,000 examples each. The new training set was completed with enough examples from SD-3, starting at pattern # 0, to make a full set of 60,000 training patterns. Similarly, the new test set was completed with SD-3 examples starting at pattern # 35,000 to make a full set with 60,000 test patterns. Only a subset of 10,000 test images (5,000 from SD-1 and 5,000 from SD-3) is available on this site. The full 60,000 sample training set is available.\\n\\nDownloaded from openml.org.\",\n",
       " 'details': {'id': '554',\n",
       "  'name': 'mnist_784',\n",
       "  'version': '1',\n",
       "  'format': 'ARFF',\n",
       "  'upload_date': '2014-09-29T03:28:38',\n",
       "  'licence': 'Public',\n",
       "  'url': 'https://www.openml.org/data/v1/download/52667/mnist_784.arff',\n",
       "  'file_id': '52667',\n",
       "  'default_target_attribute': 'class',\n",
       "  'tag': ['AzurePilot',\n",
       "   'OpenML-CC18',\n",
       "   'OpenML100',\n",
       "   'study_1',\n",
       "   'study_123',\n",
       "   'study_41',\n",
       "   'study_99',\n",
       "   'vision'],\n",
       "  'visibility': 'public',\n",
       "  'status': 'active',\n",
       "  'processing_date': '2018-10-03 21:23:30',\n",
       "  'md5_checksum': '0298d579eb1b86163de7723944c7e495'},\n",
       " 'url': 'https://www.openml.org/d/554'}"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mnist"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(70000, 784)"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X, y  = mnist['data'], mnist['target']\n",
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [],
   "source": [
    "some_digit = X[36000]\n",
    "some_digit_image = some_digit.reshape(28, 28)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(some_digit_image, cmap = matplotlib.cm.binary)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'9'"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y[36000]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 建立测试集和训练集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train, X_test, y_train, y_test = X[:60000], X[60000:], y[:60000], y[60000:]\n",
    "\n",
    "# 将数据集合交叉洗牌，交叉验证时，每个子集合数据分布均匀，有些机器学习算法对训练实例的顺序敏感\n",
    "import numpy as np\n",
    "shuffle_index = np.random.permutation(60000)  # 产生一个随机排列的0~60000索引\n",
    "X_train, y_train = X_train[shuffle_index], y_train[shuffle_index] # 分割测试集和训练集"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练一个二元分类器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False, False, False, ..., False, False, False])"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 识别数字5 ，二元分类5或者非5\n",
    "# 创建目标向量\n",
    "y_train_5 = (y_train == '5')   # 若图片为5，则y_train_5中对应元素为TRUE\n",
    "y_train_5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False, False, False, ..., False, False, False],\n",
       "       [False, False, False, ..., False, False,  True],\n",
       "       [False, False, False, ..., False, False, False],\n",
       "       ...,\n",
       "       [False, False, False, ..., False, False,  True],\n",
       "       [False, False, False, ..., False,  True, False],\n",
       "       [False, False, False, ..., False, False, False]])"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_5.reshape(20, -1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_test_5 = (y_test == '5') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([False])"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# SGD 梯度下降 分类器， 适合非常大的数据集，独立处理训练集数据，一次一个，适合在线学习，\n",
    "from sklearn.linear_model import SGDClassifier\n",
    "\n",
    "sgd_clf = SGDClassifier(random_state = 42)\n",
    "sgd_clf.fit(X_train, y_train_5)  # y_train_5 标签只有TRUE和FALSE两种值， X_train被分成两类：‘5’ 和 非‘5’\n",
    "\n",
    "sgd_clf.predict([some_digit])  # some_digit = X[36000], y[36000] = '9'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 性能考核"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用交叉验证测量精度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.9649 , 0.96435, 0.96505])"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 评估分类器比评估回归器要困难得多\n",
    "\n",
    "# 3个折叠，正确率达到 95% 以上\n",
    "from sklearn.model_selection import cross_val_score\n",
    "cross_val_score(sgd_clf, X_train, y_train_5, cv=3, scoring=\"accuracy\")  # 对sgd_clf分类器精度作评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 自定义 分类器\n",
    "# 把每张图都分类成 非5  对任意图片都设置它为非‘5’， Y==‘5’? --> False\n",
    "from sklearn.base import BaseEstimator\n",
    "class Never5Classifier(BaseEstimator):\n",
    "    def fit(self, X, y=None):\n",
    "        pass\n",
    "    def predict(self, X):\n",
    "        return np.zeros((len(X), 1), dtype=bool)  # 返回一个 (len(X) * 1 )的布尔型矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.90765, 0.91375, 0.90755])"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "never_5_clf = Never5Classifier()\n",
    "cross_val_score(never_5_clf, X_train, y_train_5, cv=3, scoring=\"accuracy\") # 对自定义never_5_clf分类器精度作评估"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 准确率超过90% ，因为5的图像大约只有10%，你猜一张图不是5， 90%的时间你都是正确的\n",
    "* 这说明准确率无法成为分类器的首要性能指标，特别是当你处理偏科数据集， 某些类比其他类更为频繁"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 混淆矩阵： 通过多维度评估分类器性能"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 评估分类器性能的更好方法是混淆矩阵\n",
    "# 混淆矩阵：A类别实例被分为B类别次数\n",
    "# 想要知道分类器将数字3和数字5混淆多少次，通过混淆矩阵的5行3列\n",
    "from sklearn.model_selection import cross_val_predict\n",
    "\n",
    "# 通过cross_val_predict（）函数，根据sgd_clf分类器预测 X_train 对应的标签值\n",
    "y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 与 cross_val_score 相比\n",
    "* 同样执行交叉验证\n",
    "* 返回的不是评估分数，是每个折叠的预测\n",
    "* 每一个实例在模型预测时使用的数据，在训练期间从未见过"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[53430,  1149],\n",
       "       [  965,  4456]], dtype=int64)"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "\n",
    "# 通过对比标签值和预测值，计算混淆矩阵，由于y_train_5只有2个值，所以混淆矩阵为2*2 矩阵，其元素分别为：\n",
    "# 行表示实际类别，列表示预测类别\n",
    "# [[A, B],\n",
    "#  [C, D]]\n",
    "# A  非‘5’图片被正确的分为 非‘5’类 ，真负类\n",
    "# B  非‘5’图片被错误的分类成 ‘5’类 ，假正类\n",
    "# C  ‘5’图片被错误的分类成 非‘5’类， 假负类\n",
    "# D  ‘5’图片被正确的分在了‘5’类 ，真正类\n",
    "confusion_matrix(y_train_5, y_train_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 精度和召回率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### 正类预测的准确率 被称为分类器的精度\n",
    "\n",
    "\n",
    "$\n",
    "\\text{精度} = \\cfrac{TP}{TP + FP}\n",
    "$\n",
    "\n",
    "TP是真正类的数量，FP是假正类的数量\n",
    "\n",
    "\n",
    "\n",
    "$\n",
    "\\text{召回率TPR} = \\cfrac{TP}{TP + FN}\n",
    "$\n",
    "* 检测正类实例的比例\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.7950044603033006"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import precision_score, recall_score\n",
    "\n",
    "precision_score(y_train_5, y_train_pred)  # 精度 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 精度为：(D/(D+B)) = 4456/(4456+1149) = 0.7950044603033006"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8219885629957573"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recall_score(y_train_5, y_train_pred) # 召回率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 召回率：(D/(D+C)) = 4456/(4456+965) = 0.8219885629957573"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 说明 检测一张图的时候，只有80%的概率是准确的，而且只有82%的数字5 被它检测出来"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "#### 将精度和召回率合成单一指标，成为 F1 分数——谐波平均值\n",
    "* 平均值函数平等对待所有的值，谐波平均值会给予较低值更高的权重，只有召回率和精度都很高时，才能获得较高的F1分数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$\n",
    "F_1 = \\cfrac{2}{\\cfrac{1}{\\text{precision}} + \\cfrac{1}{\\text{recall}}} = 2 \\times \\cfrac{\\text{precision}\\, \\times \\, \\text{recall}}{\\text{precision}\\, + \\, \\text{recall}} = \\cfrac{TP}{TP + \\cfrac{FN + FP}{2}}\n",
    "$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8082713586069291"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import f1_score\n",
    "\n",
    "# 计算F1分数\n",
    "f1_score(y_train_5, y_train_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### F1分数对那些具有相近精度和召回率 分类器更有利，这不一定符合你的期望\n",
    "#### 有时候你更关心精度，有时你能关心召回率。例如，训练一个分类器检测儿童可以放心观看的视频，你可能要求拦截了很多好的视频，低召回率，保留下来的都是安全的视频，高精度。\n",
    "#### 不能同时增加精度并减少召回率，反之亦然。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 精度/召回率权衡"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* SGDClassifier对每个实例基于决策函数计算一个分值，大于阀值为正类，否则为负类\n",
    "* 中间阀值右侧找到4个真正类 真5 ， 一个假正类 6， 精度为 4/5 80%\n",
    "* 在所有的6个 真正的5 中，分类器找到了4个，召回率为 4/6 67%\n",
    "* 提高阀值，向右移动，精度提高，召回降低\n",
    "* 反之阀值降低，召回提高，精度降低\n",
    "* SKlearn不可以直接设置阀值，可以访问决策分数，\n",
    "* SGDClassifier 默认阀值为0 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 如何设置阀值\n",
    "\n",
    "#### 用predict_proba得到每个实例属于正类的概率，然后对概率切一下。以LogisticRegression为例:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# clf = LogisticRegression()\n",
    "# clf.fit(X_train, y_train)\n",
    "# pred_proba = clf.predict_proba(X_test)[:, 1]\n",
    "# threshold = 0.75  # 阀值设置为0.75\n",
    "# pred_label = pred_proba > threshold\n",
    "\n",
    "# pred_proba是每个实例为真的概率\n",
    "# 假设阈值是0.75\n",
    "# pred_label里True就是概率大于0.75的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'5'"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "some_digit = X[0]\n",
    "some_digit_image = some_digit.reshape(28, 28)\n",
    "y[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 用 SGDClassifier.decision_function（）计算决策值，用以决定阈值大小"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2194.20283228])"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 返回决策值decision_function\n",
    "y_scores = sgd_clf.decision_function([some_digit])\n",
    "y_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True])"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 提高阈值可以提高精度，但会降低召回率，提高阈值到5000，就错了这个图\n",
    "threshold = 2000\n",
    "y_some_digit_pred = (y_scores > threshold)\n",
    "y_some_digit_pred"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 如何决定使用什么阈值\n",
    "# 返回决策值，而不是预测结果\n",
    "y_scores = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3,\n",
    "                             method=\"decision_function\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import precision_recall_curve\n",
    "\n",
    "precisions, recalls, thresholds = precision_recall_curve(y_train_5, y_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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pXnz5vj6+hIcHEz79u35888/gfyb2Tdu3Mg999xD+fLl8fPzo1atWgwfPjxne37N7Onp6YwaNYoaNWrg5eVFjRo1GDVqFOnp6Tllss/1ySefMHr0aKpUqUJQUBBdu3YlJibGwVex5KhfsT7r/r2ORT0WERYYxpFzR3jp55doM7MN205sszq8HOnpphaenchr1zajpwkhip9LJnOlCp5mzMgtN2PGlcvm1aJFweUGD84td+kY0I5w4MAB3N3d8ff3B+Ctt95iz549zJgxg6VLl+Lj48P06dN56KGHaNCgAYsWLeKTTz5h+/bttG/fnsTExJxjPf/88wwePJjmzZuzcOFCvvjiC9q1a5dv0gc4f/489957L+7u7syePZuVK1cyevToq97DHzBgAOPHj6d///6sWLGCQYMG8c477zBgwIDLyo4bN47o6Gg+//xzPvzwQ9atW0dfaX+9Inc3dx5q8BA7hu/g826fU8GvAttObqPp9KZM2zjN6vBISwMvr9zlVq3MqG3SK10Ii2itLZlatGihr2THjh0FbjNdavKfPvkkt9wnn1y5bF7Nmxdc7rHHcstFRl4x7CuaNWuWBvSuXbt0enq6jo+P19OnT9dubm66e/fu+sCBAxrQN998s87KysrZLzExUQcGBupBgwZddLwDBw5oT09P/cEHH2ittd67d692c3PTzzzzTIExZJ9j1qxZWmutN27cqAG9devWq8Z94MABrbXW27Zt04B+/fXXLyo3ZsyYi46Vfa527dpdVG7ChAka0EePHr3i9brS70Bpczr5tL5/wf2aN9C8gX78u8d1RmaGZfG0aJH7/yMgQOvMTMtCEcKlAJG6CHKqS9bMr5Si89aiBw++ctm8Nm0quFze2n6LFoWPv169enh6elKuXDmGDx9O3759+fzzz3O233///RfdI1+3bh3nzp2jb9++ZGRk5ExhYWHUq1eP3377DYCff/6ZrKwsBue9CFdRt25dgoKCGDJkCF988QVH8ntX4yWyz/foJS8Wzl5es2bNResv7WzX2PZuyoJaC8TlyvmWY2mvpUztPBWAqRun0vjjxszfNt+SeH74wbyUZN48OHdOHjETwmryX9ACS5cuZePGjezatYukpCTmzp1LuXLlcrZf2mv85MmTAERERODp6XnRtG3bNk6fPg2Q8xl2DW+bKFu2LL/++itVq1Zl+PDh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\n",
      "text/plain": [
       "<Figure size 576x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 使用matplotlib 绘制精度和召回相对于阈值的函数图\n",
    "def plot_precision_recall_vs_threshold(precisions, recalls, thresholds):\n",
    "    plt.plot(thresholds, precisions[:-1], \"b--\", label=\"Precision\", linewidth=2)\n",
    "    plt.plot(thresholds, recalls[:-1], \"g-\", label=\"Recall\", linewidth=2)\n",
    "    plt.xlabel(\"Threshold\", fontsize=16)\n",
    "    plt.legend(loc=\"upper left\", fontsize=16)\n",
    "    plt.ylim([0, 1])\n",
    "\n",
    "plt.figure(figsize=(8, 4))\n",
    "plot_precision_recall_vs_threshold(precisions, recalls, thresholds)\n",
    "plt.xlim([-30000, 30000])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 精度vs召回\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "def plot_precision_vs_recall(precisions, recalls):\n",
    "    plt.plot(recalls, precisions, \"b-\", linewidth=2)\n",
    "    plt.xlabel(\"召回\", fontsize=16)\n",
    "    plt.ylabel(\"精度\", fontsize=16)\n",
    "    plt.axis([0, 1, 0, 1])\n",
    "\n",
    "plt.figure(figsize=(8, 6))\n",
    "plot_precision_vs_recall(precisions, recalls)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 通过选择阈值来实现最佳的精度/召回率权衡"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 目标设定为90%的精度，阈值大概在2500左右 , 设置了阈值为2500\n",
    "y_train_pred_90 = (y_scores > 2500)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9036662452591656"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "precision_score(y_train_5, y_train_pred_90) #精度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.659287954251983"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recall_score(y_train_5, y_train_pred_90) #召回率"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 总结\n",
    "* 获得了一个90%精度的分类器，但如果召回太低，精度再高，也不怎么有用"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ROC 曲线: 真正类率Tpr和假正类率Fpr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import roc_curve\n",
    "\n",
    "fpr, tpr, thresholds = roc_curve(y_train_5, y_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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AFwV+iXl/v232zVNdrASERHntW/fnnnz5tGxY0enS5EGwlVj+rsLf56xH+t11bcmIlKltWvX8tRTTwFw7rnnsmzZMgW+/IKrkrGw1AfAsRlq5YtI9LDWMmvWLLKzs7ntttsoKCgAwOvV5cXll1wV+vklwS14tRufiESL3NxcRo4cyYQJE+jVqxcrV64kJUWrl6RyrhrT37KvBICUeFd9WyIilSotLaVHjx58//333H333dx4441q3cthuSodA6G9o7flljhciYhI/bHWYowhPj6e6667ji5dunDaaac5XZZEAFd176/asBeA7GO0Rl9E3Gnbtm2cffbZvPnmmwBcddVVCnypNleFfkVLv6jM53AlIiJ1b+HChWRmZrJkyRJ27drldDkSgVwV+l9vzQfgpFaNHK5ERKTulJWVceONNzJkyBAyMjJYuXKlNtuRWnFV6KclxQHQKEGz90XEPV555RXuu+8+rrrqKlasWEGnTp2cLkkilKsm8q3csAeAo3WFPRFxgZ9++omjjz6aiy66iI8++khj93LEXNXSb904uN9+Qqyrvi0RiTKFhYVcdtlldOrUifXr12OMUeBLnXBVS79i7/305DiHKxERqZ3PPvuMESNG8O2333LrrbfStm1bp0sSF3FVkzivJDhrPylOm1OISOR5+OGH6dmzJ3l5eSxatIjp06cTE+Oqtpk4zFWhv6ugFIC0RLX0RSTyfP755wwaNIicnBwGDBjgdDniQq75CHngZXU1pi8ikWLJkiU0atSIbt268dBDDxEbG4sxxumyxKVck47b837eelf/YESkofP5fNxxxx0MGDCAyZMnAxAXF6ffX1KvXNPSzw+N58d5XfM5RkRcauPGjYwaNYoPPviAsWPH8vDDDztdkkQJ14T+ln3FAJzUWrvxiUjD9cUXX9C3b1/Ky8t55plnGD16tNMlSRRxTbO4ODSmn19c7nAlIiKHduKJJzJ8+HBWr16twJewc03o78gLztw/tnmKw5WIiPzS2rVrOfvss9m1axcxMTE89thjdOzY0emyJAq5JvTjYoLfSuhCeyIijrPWMmvWLLKzs1m1ahXff/+90yVJlHNN6Fcs2WvfTPvui4jzcnNzGTlyJBMmTKB3797k5OTQs2dPp8uSKOea0C8sC4Z+Yqx24xMR591www385z//4e6772bhwoW0atXK6ZJE3DN7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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "def plot_roc_curve(fpr, tpr, label=None):\n",
    "    plt.plot(fpr, tpr, linewidth=2, label=label)\n",
    "    plt.plot([0, 1], [0, 1], 'k--')\n",
    "    plt.axis([0, 1, 0, 1])\n",
    "    plt.xlabel('假正类率', fontsize=16)\n",
    "    plt.ylabel('真正类率', fontsize=16)\n",
    "\n",
    "plt.figure(figsize=(8, 6))\n",
    "plot_roc_curve(fpr, tpr)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "* 曲线下面积AUC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9659843405860827"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算曲线下面积AUC，虚线是随机分类0.5到1\n",
    "from sklearn.metrics import roc_auc_score\n",
    "\n",
    "roc_auc_score(y_train_5, y_scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 召回率TPR越高，分类器的假正类FPR就越多\n",
    "* 虚线表示纯随机分类器的ROC曲线，好的分类器应该远离这条线，向左上角\n",
    "* 是使用精度/召回率 PR曲线，还是使用ROC，关键在于 正类非常少或者更关注假正类而不是假负类，选择PR，反之ROC\n",
    "* 例如：前面例子ROC曲线很不错是因为跟负类 非5 相比， 正类 数据5 数量真的很少"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 训练随机森林分类器RandomForestClassifier\n",
    "#### 比较SGD分类器的ROC曲线和ROC AUC分数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 获取训练集中每个实例的分数\n",
    "* RandomForestClassifier 没有descision_function(),但是拥有dict_proda()方法，sklearn中分类器都有这两个中的一个\n",
    "* dict_proda返回一个矩阵，每行一个实例，每列代表一个类别的概率，比如这个图片 [0.3, 0.7],70%是5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "forest_clf = RandomForestClassifier(n_estimators=10, random_state=42)\n",
    "y_probas_forest = cross_val_predict(forest_clf, X_train, y_train_5, cv=3,\n",
    "                                    method=\"predict_proba\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.9, 0.1],\n",
       "       [1. , 0. ],\n",
       "       [1. , 0. ],\n",
       "       ...,\n",
       "       [1. , 0. ],\n",
       "       [1. , 0. ],\n",
       "       [1. , 0. ]])"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_probas_forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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4KtMGShf3vTaO3Qwha9dO1i8+Mqi1rgxjBt35fHUsmXNl5AqVa7c9q+/rv5bTp9+dVuLFq4h+DQVK159fNbHxzXpSghPs2rVKpYsWcIHH3zAyy+/jI9PPhyu1Vp79a1u3bo6t1JSHXrBlkO63uiVuvIb3+nKb3yn+87cqv+MPZ/rfYmCIzlZ6wsXXL+fPq31kCFaz5595XYtWmhdrdqVbVWqaA1ax8Zq7XCYtt69TduXX5rfz57VeswY09anj+u5P/9s2ipVcrUlJZk2uPJ1GjY0bRMnmt8dDq1fe820vfiia7ulS7V+4AGtP//c1XbsmNZDh2q9cuWVr7N7t9Z//nn130IIceNSUlJ0VFTU5d/379+fo+cBkfo6amaB6+n/tO8k7y7dw97j5wGoWbE4Qx+oQcNbS1mcTOS1hARznDTNhg1mYlj9+q4h6cWLzYzsRx81x5gBpk2DL76AJ5+El182batWQevW0L69OX0ITE997FioVs30oNN68GvWmPs7d7qGzosUMbe1a81xZjC94mrVXEPuxYubyVdFipj2NNWrQ58+ruFsMEPa33139THguXPN+06bGa6U6VWPH3/ldvffb27plStnJmql5+/vGmpPz6/AfXIIkfeOHj1K9+7d2bRpE7///js333wzt956a76+ZoH5T/f34+cZs2wP6/84CUDFEkEMaluNh8MqyIQ5D6W1maQV4Fy44uRJc8zXx8dM4AIzi7tVKzMkvG6d67nVq5sh7pQUU4APHoQXXoCoKDP7u4nzNKYffoBJk+Dmm11FXymIjDRFOK3op31J2LDB9RqlSplirPWV59ouWmRet2q6BaR37rz6/Y0ZY27ptW5tvpikV6qUOU0sowceuLots7N5cnIesBDCvb777jt69+5NYmIikyZNolL60yryke2Lfuz5i3y48g8WbDWT9IoG+vHsfbfT555bKOQvn4ZWSJv5nTaZ6vff4eOPzWk66RfOuO8+V8/a4TCnJh04YAr98XTndERGXj0xKzDQ/HzjDTOZq3JlMzv86NErt334YTPrOv05t61bm/Ok059bGx5uetDpT20qUybzYvzII7n+kwghCgitNa+88gofffQR4eHhzJ8/n2rph/bymUeespcbWZ2yl5LqYOK6/Xyx3kzS8/VRdGtwMy+2rEqpIoEWJLW3mBhzulO1aq7zgBcvNr3e++83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\n",
      "text/plain": [
       "<Figure size 576x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制ROC曲线，需要决策值不是概率，直接使用正类的概率作为决策值：\n",
    "y_scores_forest = y_probas_forest[:, 1] \n",
    "fpr_forest, tpr_forest, thresholds_forest = roc_curve(y_train_5,y_scores_forest)\n",
    "\n",
    "plt.figure(figsize=(8, 6))\n",
    "plt.plot(fpr, tpr, \"b:\", linewidth=2, label=\"SGD\")\n",
    "plot_roc_curve(fpr_forest, tpr_forest, \"Random Forest\")\n",
    "plt.legend(loc=\"lower right\", fontsize=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9935045270592147"
      ]
     },
     "execution_count": 118,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Rand 比SGD 好很多，ROC AUC的分数也高很多\n",
    "roc_auc_score(y_train_5, y_scores_forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9864094695309075"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 再看一下 精度和召回率 也很高\n",
    "y_train_pred_forest = cross_val_predict(forest_clf, X_train, y_train_5, cv=3)\n",
    "precision_score(y_train_5, y_train_pred_forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8301051466519093"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recall_score(y_train_5, y_train_pred_forest)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 总结\n",
    "* 选择合适的指标利用交叉验证来对分类器进行评估\n",
    "* 选择满足需求的精度/召回率权衡\n",
    "* 使用ROC曲线和ROC AUC分数比较多个模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多类别分类器\n",
    "* 尝试5 之外的检测\n",
    "* 多类别分类器 区分两个以上的类别\n",
    "* 随机森里和朴素贝叶斯可以直接处理多个类别\n",
    "* 支持向量机svm和线性分类器只可以处理二元分类器"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 解决方案\n",
    "1. 将数字图片分类0到9，训练10个二元分类器，每个数字一个，检测一张图片时，获取每个分类器的决策分数，哪个最高属于哪个，称为一对多OvA\n",
    "2. 为每一对数字训练一个二元分类器，区分0，1 区分0，2 区分1，2 称为一对一OvO策略，存在N个类别，需要N*（N-1）/2个分类器，最后看哪个类别获胜最多"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 优缺点\n",
    "* OvO 只需要用到部分训练集对其必须区分两个类别进行训练\n",
    "* 对于较小训练集合OvO比较有优势， 大训练集合 OvA 速度快，所以OvA更常用，比如svm 在数据规模扩大时表现糟糕\n",
    "* sklearn 检查到使用二元分类算法进行多类别分类任务，会自动运行OvA，SVM分类器除外"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 121,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['5'], dtype='<U1')"
      ]
     },
     "execution_count": 121,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sgd_clf.fit(X_train, y_train)\n",
    "sgd_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-26568.18469951, -20995.98420746,  -9795.17467258,\n",
       "         -1590.58682849, -22714.40215291,   2269.72823404,\n",
       "        -28816.7417919 , -15275.95995234,  -8491.27763872,\n",
       "         -9023.15092485]])"
      ]
     },
     "execution_count": 122,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 内部实际上训练了10个二元分类器，获得图片的决策分数，然后选择了分数最高的类别\n",
    "# 返回10个分数，每个类别1个\n",
    "some_digit_scores = sgd_clf.decision_function([some_digit])\n",
    "some_digit_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.argmax(some_digit_scores)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 126,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'5'"
      ]
     },
     "execution_count": 126,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sgd_clf.classes_[np.argmax(some_digit_scores)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], dtype='<U1')"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 目标类别列表会存储在classes_这个属性中，按值大小排列，\n",
    "sgd_clf.classes_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['5'], dtype=object)"
      ]
     },
     "execution_count": 130,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用OvO策略，一对一或者一对多\n",
    "from sklearn.multiclass import OneVsOneClassifier\n",
    "ovo_clf = OneVsOneClassifier(SGDClassifier(max_iter=8, tol=-np.infty, random_state=42))\n",
    "ovo_clf.fit(X_train, y_train)\n",
    "ovo_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用OvO策略的分类器的数目  10*9/2\n",
    "len(ovo_clf.estimators_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['5'], dtype=object)"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用随机森林预测\n",
    "forest_clf.fit(X_train, y_train)\n",
    "forest_clf.predict([some_digit])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0. , 0. , 0. , 0.1, 0. , 0.9, 0. , 0. , 0. , 0. ]])"
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 随机森林直接将实例分为多个类别，调用predict_proba()可以获得分类器将每个实例分类为每个类别的概率列表\n",
    "forest_clf.predict_proba([some_digit])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 评估分类器"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* SGD"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.87455, 0.8754 , 0.875  ])"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用交叉验证评估SGD的准确率\n",
    "cross_val_score(sgd_clf, X_train, y_train, cv=3, scoring=\"accuracy\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 每个折叠的精度都是0.87左右，不算高。可以做进一步优化数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files\\python37\\lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:573: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  ConvergenceWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([0.89695, 0.9016 , 0.90235])"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 将输入进行简单缩放 ，可以得到准确率 90 %以上\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))\n",
    "cross_val_score(sgd_clf, X_train_scaled, y_train, cv=3, scoring=\"accuracy\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 对输入数据进行缩放，可以提高精度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 错误分析"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 项目流程\n",
    "1. 探索数据准备的选项\n",
    "2. 尝试多个模型\n",
    "3. 选择最佳模型并用GridSearchCV对参数进行微调\n",
    "4. 尽可能自动化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 其中， 3. 确定了一个相对合适的模型，进一步优化，分析其错误类型\n",
    "* 查看混淆矩阵\n",
    "* 使用cross_val_predict()进行预测\n",
    "* 调用confusion_matrix()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\program files\\python37\\lib\\site-packages\\sklearn\\linear_model\\_stochastic_gradient.py:573: ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.\n",
      "  ConvergenceWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[5599,    0,   16,    8,    8,   39,   33,    4,  215,    1],\n",
       "       [   1, 6413,   40,   24,    2,   39,    7,   10,  193,   13],\n",
       "       [  27,   27, 5270,   86,   70,   25,   68,   34,  338,   13],\n",
       "       [  32,   20,  108, 5242,    3,  195,   24,   37,  404,   66],\n",
       "       [  14,   13,   45,   13, 5203,    9,   33,   21,  325,  166],\n",
       "       [  30,   18,   26,  151,   48, 4474,   84,   15,  508,   67],\n",
       "       [  28,   19,   51,    3,   39,   90, 5559,    2,  126,    1],\n",
       "       [  20,   13,   52,   24,   43,   11,    4, 5717,  172,  209],\n",
       "       [  18,   64,   44,   94,    2,  122,   30,    9, 5419,   49],\n",
       "       [  24,   22,   29,   57,  123,   39,    1,  175,  357, 5122]],\n",
       "      dtype=int64)"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train_pred = cross_val_predict(sgd_clf, X_train_scaled, y_train, cv=3)\n",
    "conf_mx = confusion_matrix(y_train, y_train_pred)\n",
    "conf_mx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 使用matplotlib的matshow 函数来查看混淆矩阵的图像表示\n",
    "plt.matshow(conf_mx, cmap = plt.cm.gray)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 看起来不错，大多数图片都在主对角线上，说明它们被正确分类\n",
    "* 数字5 看起来比较暗，说明1. 数字5图片较少  2. 分类器在数字5上执行效果不如其他数字上好\n",
    "* 假设把焦点放在错误上，为取得错误率，而不是错误绝对值，需要将混淆矩阵中每个值除以相应类别中的图片数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "row_sums = conf_mx.sum(axis=1, keepdims=True)\n",
    "norm_conf_mx = conf_mx / row_sums\n",
    "\n",
    "# 用0填充对角线 只保留错误，重新绘制\n",
    "np.fill_diagonal(norm_conf_mx, 0)\n",
    "plt.matshow(norm_conf_mx, cmap=plt.cm.gray)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 每行代表实际类别，每列代表预测类别\n",
    "* 8列比较亮，说明许多图片被错误的分类为数字8\n",
    "* 有些很暗，比如行1，大多数数字1都被正确的分类，一些和8混淆\n",
    "* 5和3是混淆最多的"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 结论\n",
    "* 改进数字8的分类\n",
    "* 修正数字3和5的混淆"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 如何优化分类器\n",
    "* 尝试多收集这些数字的训练集\n",
    "* 开发一些新特征来改进分类器\n",
    "* 优化分类器算法\n",
    "* 使用pillow或opencv对图片预处理，让显示模型更突出\n",
    "* 分析单个错误"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_digits(instances, images_per_row=10, **options):\n",
    "    size = 28\n",
    "    images_per_row = min(len(instances), images_per_row)\n",
    "    images = [instance.reshape(size,size) for instance in instances]\n",
    "    n_rows = (len(instances) - 1) // images_per_row + 1\n",
    "    row_images = []\n",
    "    n_empty = n_rows * images_per_row - len(instances)\n",
    "    images.append(np.zeros((size, size * n_empty)))\n",
    "    for row in range(n_rows):\n",
    "        rimages = images[row * images_per_row : (row + 1) * images_per_row]\n",
    "        row_images.append(np.concatenate(rimages, axis=1))\n",
    "    image = np.concatenate(row_images, axis=0)\n",
    "    plt.imshow(image, cmap = matplotlib.cm.binary, **options)\n",
    "    plt.axis(\"off\")\n",
    "\n",
    "\n",
    "# 查看数字3和数字5的例子\n",
    "cl_a, cl_b = '3', '5'\n",
    "X_aa = X_train[(y_train == cl_a) & (y_train_pred == cl_a)]\n",
    "X_ab = X_train[(y_train == cl_a) & (y_train_pred == cl_b)]\n",
    "X_ba = X_train[(y_train == cl_b) & (y_train_pred == cl_a)]\n",
    "X_bb = X_train[(y_train == cl_b) & (y_train_pred == cl_b)]\n",
    "\n",
    "plt.figure(figsize=(8,8))\n",
    "plt.subplot(221); \n",
    "plot_digits(X_aa[:25], images_per_row=5)\n",
    "plt.subplot(222); \n",
    "plot_digits(X_ab[:25], images_per_row=5)\n",
    "plt.subplot(223);\n",
    "plot_digits(X_ba[:25], images_per_row=5)\n",
    "plt.subplot(224); \n",
    "plot_digits(X_bb[:25], images_per_row=5)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 左侧两个是被分类为3的图片，右侧两个是被分类为5的图片\n",
    "* 大多数错误分类的图片看起来还是非常明显的错误。原因：SGD是一个线性模型，它所做就是为每个像素分配一个各个类别的权重，当它看到新的图像，将加权后的像素强度汇总，从而得到一个分数进行分类\n",
    "* 数字3和5在一部分像素位上有区别，所以分类器很容易将其弄混。通过上面图像，如果书写3 的连接点左移，分类器可能将其分类为数字5，这个分类器对图像位移和旋转敏感\n",
    "* 减少混淆的方法之一，就是对图像进行预处理，确保位于中心位置并且没有旋转"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多标签分类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 输出多个二元标签的分类系统称为多标签分类系统\n",
    "* 为每个实例产生多个类别 ，例如 照片识别多个人脸\n",
    "* 分类器经过训练可以识别小红，小白，小军，一张照片 里有 小红，小白\n",
    "* 经过分类器，应该输出[1,1,0]， 是小红，是小白，不是小军"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_train1 = y_train.astype(np.int32)\n",
    "y_test1 = y_test.astype(np.int32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KNeighborsClassifier()"
      ]
     },
     "execution_count": 171,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#KNN 算法\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "y_train_large = (y_train1 >= 7)\n",
    "y_train_odd = (y_train1 % 2 == 1)\n",
    "y_multilabel = np.c_[y_train_large, y_train_odd]  # 构建一个多标签分类系统[值>7, 奇数]\n",
    "\n",
    "knn_clf = KNeighborsClassifier()\n",
    "knn_clf.fit(X_train, y_multilabel)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[False,  True]])"
      ]
     },
     "execution_count": 172,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# knn支持多标签分类，不是所有的分类器都支持\n",
    "knn_clf.predict([some_digit]) # 5 --> 小于7， 奇数 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 评估多标签分类器方法很多，方法之一就是测量每个标签的F1分数，或者其他二元分类器指标，然后简单平均"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# # 评估多标签分类器方法很多，方法之一就是测量每个标签的F1分数，或者其他二元分类器指标，然后简单平均\n",
    "# y_train_knn_pred = cross_val_predict(knn_clf, X_train, y_multilabel, cv=3)\n",
    "# f1_score(y_multilabel, y_train_knn_pred, average=\"macro\")\n",
    "0.977090\n",
    "# 上面假设了所有标签都同等重要，也可以给每个标签设置一个权重（该目标标签实例的数量），设置average='weighted'"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多输出分类"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 例子：构建一个系统去除图片中的噪声，输入一张有噪声的图片，它将输入一张干净的数字图片，分类器输出是多个标签，一个像素一个标签，每个标签多个值0到255"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 增加噪声，目标将图片还原为原始图片 创建训练集和测试集\n",
    "noise = np.random.randint(0, 100, (len(X_train), 784))\n",
    "\n",
    "# 将加了噪声的图片作为训练集和测试集的X (特征)，\n",
    "X_train_mod = X_train + noise   # 将加了噪声的图片作为训练集和测试集的X\n",
    "noise = np.random.randint(0, 100, (len(X_test), 784))\n",
    "X_test_mod = X_test + noise\n",
    "\n",
    "# 将原来无噪声的图片作为训练集和测试集的y （标签）\n",
    "y_train_mod = X_train\n",
    "y_test_mod = X_test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "some_index = 5500\n",
    "plt.subplot(121);plt.imshow(X_test_mod[some_index].reshape(28, 28), cmap = matplotlib.cm.binary)\n",
    "plt.subplot(122);plt.imshow(y_test_mod[some_index].reshape(28, 28), cmap = matplotlib.cm.binary)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {},
   "outputs": [],
   "source": [
    "knn_clf.fit(X_train_mod, y_train_mod)\n",
    "clean_digit = knn_clf.predict([X_test_mod[some_index]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.imshow(clean_digit.reshape(28, 28), cmap = matplotlib.cm.binary)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
